When data are represented by multiple bytes, there is no unique way to order them. Accordingly, any order used is subject to arbitrary convention, called “endianness.” The two main types of endianness are known as big-endian and little-endian. In big-endian format, the order of bytes in a word is such that the most significant byte is placed left-most in the word structure, the way humans deal with normal arithmetic (left to right). In contrast, little-endian format places the least significant byte leftmost in the word structure. Little-endian format is organized for the required processing order, since numbers are calculated by a processor starting with the least significant (left-most) digits. Most RISC-based processors use big-endian byte order while most processors manufactured by the Intel Corporation use little-endian byte order.
In a computational environment that permits both big-endian and little-endian formats to coexist, any time typed data objects are written to a file, transferred between different platforms or shared between different applications within a single system, the byte order or endianness of the data comprising the object must be taken into account. Otherwise, the same binary data residing on disk or in memory looks different to each type of program: little-endian programs look to the last byte for the most significant bit; big-endian programs look to the first byte for the most significant bit. As used herein, a typed data object is a multi-byte data structure having one or more fields wherein each field is defined by type (e.g., floating point, “line,” “polygon” or “widget”). Illustrative typed data objects include, but are not limited to, files, multi-byte records within a file, multi-byte operating system data structures and multi-byte user and application-defined data structures. It will be recognized that a typed data object cannot be converted from one byte-ordering convention to another simply by swapping all the object's bytes.
To change byte ordering, programs are typically recompiled. Recompiling a program permits the resulting executable code to be run or executed on different endian-based platforms. Recompiling a program does not, however, address the problem of how to translate typed data objects from a first byte ordering to a second byte ordering. In the past, to compensate for system or program-specific typed data object formats between different endian-based platforms, application developers expended significant amounts of time and effort to recode their applications and/or to encode within each object an explicit description of the object so it could be converted by another application or function.
Accordingly, it would be beneficial to provide methods, devices and systems to translate typed data objects from one format to a second format in an application independent and developer-transparent manner.